package com.xiumu.service.sys;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xiumu.common.core.page.PageQuery;
import com.xiumu.pojo.sys.dto.MenuDTO;
import com.xiumu.pojo.sys.entity.Menu;
import com.xiumu.pojo.sys.query.MenuQuery;

import java.util.List;

/**
 * 菜单表，菜单与权限是一对一的关系 Service 接口
 *
 * @author XiuMu
 * @Date 2023-01-18 10:07:33
 */
public interface MenuService extends IService<Menu> {
    /**
     * 分页查询
     *
     * @param pageQuery 分页条件
     * @return
     */
    Page<Menu> listPage(PageQuery<MenuQuery, Menu> pageQuery);

    /**
     * 根据条件查询 Menu
     *
     * @param menu 查询条件
     * @return
     */
    List<Menu> listByMenu(MenuQuery menu);

    /**
     * 根据权限集合查询对应的菜单信息
     * 并构建成树形结构
     *
     * @param authCodeList 权限集合
     * @return
     */
    List<Tree<Long>> listByAuthCodeList(List<String> authCodeList);

    /**
     * 根据权限编码获取菜单
     *
     * @param authCode 权限编码
     * @return
     */
    Menu getByAuthCode(String authCode);

    /**
     * 根据权限编码集合查询菜单
     *
     * @param authCodeList 权限编码
     * @return
     */
    List<Menu> listInAuthCodeList(List<String> authCodeList);

    /**
     * 根据父权限ID，权限编码和菜单信息保存或更新
     * 父权限ID用来获取父权限的菜单。
     *
     * @param parentAuthCode 父权限编码
     * @param authCode       权限编码
     * @param MenuDTO        菜单信息
     * @return
     */
    boolean saveOrUpdateByParentAuthIdAndAuthCodeAndMenuDTO(String parentAuthCode, String authCode, MenuDTO MenuDTO);
}
